(function($) {

//var plugin = {
//	//Nom de la classe à instancier /!\ CE NOM DOIT ETRE UNIQUE ET IDENTIQUE AU NOM JQUERY /!\
//	name: 'NotePlugin'
//};

// Constructeur
var NotePlugin = function(options){ // rajouter element
	//console.log(this);
	if(arguments.length) {
		this._init( options );// rajouter element
	} else 
		console.log('Aucun paramètre reçu pour NotePlugin');
};

NotePlugin.prototype = {
	name: 'NotePlugin',
	
	defaults: {
		data: {
		}
	},
	
	defaultNote: {
		id:0,
		content: '',
		isNew: 1,
		isDelete: 0		
	},
	
	_init: function(options){// rajouter element
		var t = this;
		
		// Public
		t.$element = $(options.element);
		t.defaults = $.extend(true, {}, t.defaults, options);
		
		t.idEvent = t.defaults.idEvent;
		
		t.notes = {};
		
		t.$element.html(t.defaults.content);
		
		if(t.idEvent == 0){
			t.$element.html('<div class="alert">L\'événement doit être enregistré pour écrire une note');
		} else {
			//$.cleditor.defaultOptions.controls = "bold italic underline strikethrough";

			//$( '#em-plugin-note-editor').cleditor({ width: 'auto' });
			
			
			
			/*$('#em-plugin-note-editor').tinymce({
				menu: {},
				language: 'fr_FR',
				plugins: [
				          "advlist autolink link image lists charmap print preview hr anchor pagebreak spellchecker",
				          "searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking",
				          "save table contextmenu directionality emoticons template paste textcolor"
				 ],
			    toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
			});*/

			
			t.notes[0] = $.extend(true, {}, t.defaultNote, {
				content : $( '#em-plugin-note-editor').val()
			});
			
			$('#em-plugin-note-form').on('submit', function(e){
				e.preventDefault();
				
				t.notes[0].content = $( '#em-plugin-note-editor').val();
				
				var dataSend = {notes : t.notes};
				
				var urlUpdate = t.defaults.options.urlBase + 
				t.defaults.options.urlPattern
					.replace(/idEvent/, t.idEvent)
					.replace(/action/, t.defaults.options.urlUpdateAction);
			
				$.ajax({
		    		type: 'POST',
		    		url: urlUpdate,
				  	data: dataSend,
				    dataType: "json"
		    	}).done(function(jsonResult) {
		    		if(jsonResult && typeof jsonResult.result != 'undefined'){
		        		if(jsonResult.result == 200){
		        			/*$.each(jsonResult.orders, function(k, v){
		        				//t.notes[0].id = v.id;
		        				t.notes[0].isNew = 0;
		        			})*/
		        			t.notes[0].isNew = 0;
		        			        			
		        			if(typeof callback == 'function'){
		        				callback();
		        			} else {
		        				$.pnotify({
			                        title: "Terminé !",
			                        text: jsonResult.msg,
			                        type: "success"
			                    });
		        			}
		        		} else if(jsonResult.result == 500){
		        			$.pnotify({
		                        title: "Erreur !",
		                        text: jsonResult.msg,
		                        type: "error"
		                    });
		        		}
		    		} else {
		    			alert('La réponse du serveur est incorrecte');
		        	}
		    	}).fail(function(jqXHR, textStatus, errorThrown) {
		    		t.refresh();
		    		alert('Une erreur est survenue ('+errorThrown+')');
		    	}).always(function(jqXHR, textStatus, errorThrown) {
		    		t.isLock = false;
		    	});
			});
		}
	},
};

$.fn.pluginParticipantsEvent = function(options) {

	var isMethodCall = typeof options === "string",
		args = Array.prototype.slice.call( arguments, 1 ),
		returnValue = this;

	// prevent calls to internal methods
	if ( isMethodCall && options.charAt( 0 ) === "_" ) {
		return returnValue;
	}

	if ( isMethodCall ) {
		this.each(function() {
			var instance = $.data( this, 'NotePlugin' ),
				methodValue = instance && $.isFunction( instance[options] ) ?
					instance[ options ].apply( instance, args ) :
					instance;

			if ( methodValue !== instance && methodValue !== undefined ) {
				returnValue = methodValue;
				return false;
			}
		});
	} else {
		this.each(function() {
			var instance = $.data( this, 'NotePlugin' );
			if ( !instance ) {
				$.data( this, 'NotePlugin', new NotePlugin( this, options ) );
			}
		});
	}

	return returnValue;
};

// Association en tant que plugin jQuery
//$.fn.NotePlugin = plugin.NotePlugin;

// Si l'eventManager a été déclaré on le surcharge pour la gestion du plugin
if(typeof $.eventManager != 'undefined'){
	var em = $.eventManager;
	
	// Ajout du plugin au register du manager, il sera instancié par le manager automatiquement
	em.addPluginToRegister('NotePlugin', NotePlugin);
	
	// Ajout d'une fonction lors du callback du init plugins
	em.addCallBackInit(function(){
	});
}

})(jQuery);